螞蟲,近身難受,有寶物螞粉(maven)與蓋兜(gradle),撒粉可阻,兜能護身,唯二者擇一。
在上回 Dependencies,可以看出,一個 Spring Boot 專案,可能包含許許多多相依的套件。如果把這個專案比喻成一個營隊,那相依的套件好比是眾將官(或是眾嘍囉),管理好這些成員,不允許冒名頂替,出操上課,都要安排,這可不是小工程,而 Maven 或是 Gradle 就是作這個用的,不是實際上戰場,而是讓這些上戰場的官兵元帥,可以整軍成隊,發揮戰力。新創建 Spring Boot 專案時,Type 欄位有 Maven 及 Gradle 提供選擇。
簡單來說,Maven 較有歷史,因此配套更為完整些,以 XML 格式為主,看起來有點小淩亂--個人感覺;但 Gradle 比較新,資歷較淺,比較簡單用一點點,以 JSON 格式為主,看起來清爽一些。
在前面專案(simpleDemo)為例,在 gradle 中,有 build.gradle
, 以dependencies 為例,編碼為:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
在 maven 中,設定則存在 pom.xml
,換湯不換藥,不過4行變成11行。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
以 plug in 為例,在 gradle 下build.gradle為:
plugins {
id 'org.springframework.boot' version '2.1.8.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
sourceCompatibility = '1.8'
而在 maven, pom.xml 中編碼如下,我們看見7行變成18行。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在以後系列文中,我都採用 Maven,這是因為在網站上找到的資料Maven還是比較多,方便參照比對。
(apache) maven / gradle (另外有一個競爭者 (apache) ant (another neat tool), 目前相對勢微), 除了作依賴關係管理(dependency management)外,還有許多的功能,例如構建自動化工具(build automation tool)…等,在此就不多作介紹,都有相當的內容,或許,單單這兩個寶物,任何一個都足以寫三十篇了。